#ifndef _WMS_WIFI_H_
#define _WMS_WIFI_H_

#include <FS.h> //this needs to be first, or it all crashes and burns...
#include <LittleFS.h>
#include <WiFiManager.h>
#include <ArduinoJson.h>
#include <OneButton.h>
#include <ESPmDNS.h>

#define HEARTBEAT_INTERVAL 60000      // 心跳包发送间隔（毫秒）

// WiFi配置文件路径
#define WIFI_CONFIG_FILE "/wifi_config.json"

// AP模式的默认设置
#define AP_NAME "ESP32_WMS_Printer"
#define AP_PASSWORD "12345678"

// 配置门户超时时间（毫秒）
#define PORTAL_TIMEOUT 180000  // 3分钟

// 默认服务器URL
#define DEFAULT_SERVER_URL "http://your-server.com"

// WiFi状态枚举
typedef enum {
    WIFI_STATUS_DISCONNECTED = 0,
    WIFI_STATUS_CONNECTING,
    WIFI_STATUS_CONNECTED
} wifi_state_e;

// 设备绑定状态枚举
typedef enum {
    DEVICE_UNBINDED = 0,
    DEVICE_BINDING,
    DEVICE_BINDED
} device_bind_state_e;

class WifiManagerClass {
public:
    // 初始化WiFi管理器
    bool init();
    
    // 连接到WiFi
    bool connect();
    
    // 重置WiFi设置
    void resetSettings();
    
    // 检查是否已连接WiFi
    bool isConnected();
    
    // 获取IP地址
    String getIPAddress();
    
    // 启动配置门户
    void startConfigPortal();
    
    // 处理WiFi事件
    void handleEvents();
    
    // 设置服务器URL
    void setServerUrl(const char* url);
    
    // 获取服务器URL
    const char* getServerUrl();
    
    // 绑定到服务器
    bool bindToServer();

private:
    WiFiManager wifiManager;
    char serverUrl[100] = {0}; // 服务器URL
    WiFiManagerParameter* serverUrlParam; // 服务器URL参数
    
    // 保存WiFi配置到文件系统
    bool saveConfigToFS();
    
    // 从文件系统加载WiFi配置
    bool loadConfigFromFS();
    
    // 配置保存回调
    static void saveConfigCallback();
    
    // 标记配置是否需要保存
    static bool shouldSaveConfig;
};

extern WifiManagerClass WifiManager;

#endif // _WMS_WIFI_H_ 